package com.sse.casa.simulacion;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Random;

import com.sse.VO.CasaVO;
import com.sse.util.Security;

/**
 * @author Andres
 */
public class ManejadorCasa {
	public static ArrayList<CasaVO> obtenerCasas() throws Exception {
		ArrayList<CasaVO> lCasas = new ArrayList<CasaVO>();

		Connection con = ConectorBD.getConexion();
		Statement sqlStatement = con.createStatement();
		ResultSet rs = null;

		rs = sqlStatement.executeQuery("SELECT cas_id, cas_nombre, publickey, privatekey, usuario_id  FROM casa");

		while (rs.next()) {

			CasaVO vo = new CasaVO();

			vo.setIdentificador(rs.getInt("cas_id"));
			vo.setDescripcion(rs.getString("cas_nombre"));
			vo.setPublicKey(rs.getBytes("publickey"));
			vo.setPrivateKey(rs.getBytes("privatekey"));
			vo.setUsuarioId(rs.getInt("usuario_id"));		

			lCasas.add(vo);
		}

		con.close();

		return lCasas;
	}

	public static CasaVO obtenerCasa(int cas_id) throws Exception {
		
		Connection con = ConectorBD.getConexion();
		ResultSet rs = null;
		
		String strSql ="SELECT cas_id, cas_nombre, publickey, privatekey, usuario_id  FROM casa WHERE cas_id= ?";		
		PreparedStatement pstmt = con.prepareStatement(strSql);
		pstmt.setInt(1, cas_id);
		rs = pstmt.executeQuery();

		CasaVO vo = new CasaVO();
		
		if (rs.next()) {			
			vo.setIdentificador(rs.getInt("cas_id"));
			vo.setDescripcion(rs.getString("cas_nombre"));
			vo.setPublicKey(rs.getBytes("publickey"));
			vo.setPrivateKey(rs.getBytes("privatekey"));
			vo.setUsuarioId(rs.getInt("usuario_id"));			
		}

		con.close();
		
		return vo;

	}

	public static int ingresarCasa(CasaVO vo) throws Exception {
		String strSql = "INSERT INTO casa(" + "cas_id," + "cas_nombre," + "publickey," + "privatekey," + "usuario_id"
				+ ") VALUES (?, ?, ?, ?, ?)";

		Connection con = ConectorBD.getConexion();
		PreparedStatement pstmt = con.prepareStatement(strSql);

		pstmt.setInt(1, vo.getIdentificador());
		pstmt.setString(2, vo.getDescripcion());
		pstmt.setBytes(3, vo.getPublicKey());
		pstmt.setBytes(4, vo.getPrivateKey());
		pstmt.setInt(5, vo.getUsuarioId());

		int resultado = pstmt.executeUpdate();

		con.close();

		return resultado;
	}

	public static void main(String[] args) throws Exception {
		
		// SE CREA 50 CASAS
		for (int i = 1; i < 501; i++) {
			CasaVO vo = new CasaVO();
			vo.setIdentificador(i);
			vo.setDescripcion("CASA " + (i));
			vo.setPrivateKey(Security.getPrivateKey(i));
			vo.setPublicKey(Security.getPublicKey(i));
			vo.setUsuarioId(new Random().nextInt(8));

			ManejadorCasa.ingresarCasa(vo);
		}
		

		System.out.println(ManejadorCasa.obtenerCasas().size());

	}
}
